﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Grupo2.Dominio;
using System.Data.SqlClient;


namespace Grupo2.Persistencia
{
    public class PostulanteDAO
    {
        //Atributos
        //private String cadenaConexion = @"Data Source=WISETRACK\SQLEXPRESS;Initial Catalog=Grupo2;User Id=grupo2;Password=1234;";
        //private String cadenaConexion = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Grupo2;Data Source=localhost";
        private String cadenaConexion = "Data Source=LOCALHOST;Initial Catalog=Grupo2;User Id=grupo2;Password=grupo2;";
        private SqlConnection conexion;

        public PostulanteDAO()
        {
            conexion = new SqlConnection(cadenaConexion);
        }

        public Postulante CrearPostulante(Postulante postulante)
        {
            conexion.Open();
            //String sentencia = "INSERT INTO Postulante (Id_Postulante, Nombres, Apellidos, Sexo, Profesion, Especialidad, Ciudad_Domicilio, Direccion, Email, Password, Dni, Telefono, Referencia_Idiomas) VALUES (" + 
            String sentencia = "INSERT INTO Postulante VALUES (" + 
                                                                postulante.Id_Postulante + ",'" +
                                                                postulante.Nombres + "','" +
                                                                postulante.Apellidos + "','" +
                                                                postulante.Sexo + "','" +
                                                                postulante.Profesion + "','" +
                                                                postulante.Especialidad + "','" +
                                                                postulante.Ciudad_Domicilio + "','" +
                                                                postulante.Direccion + "','" +
                                                                postulante.Email + "','" +
                                                                postulante.Password + "','" +
                                                                postulante.Dni + "','" +
                                                                postulante.Fecha_Nacimiento + "','" +
                                                                postulante.Telefono + "','" +                                                                
                                                                postulante.Referencia_Idiomas + "')";
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            comando.ExecuteNonQuery();
            conexion.Close();
            return this.ObtenerPostulante(postulante.Id_Postulante); //TODO: Queda pendiente de devolver objeto creado
        }
        
        public Postulante ObtenerPostulante(Int32 Id_Postulante)
        {
            conexion.Open();
            String sentencia = "SELECT * FROM Postulante WHERE Id_Postulante='" + Id_Postulante + "'";
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            SqlDataReader resultado = comando.ExecuteReader();
            Postulante postulante = new Postulante();
            if (resultado.HasRows) //Si el resultado tiene filas, llenamos el objeto
            {
                resultado.Read(); //Avanzar el índice de la lista de la fila 0 a la fila 1
                postulante.Id_Postulante = Convert.ToInt32(resultado["Id_Postulante"]);
                //postulante.Nombres = (String)resultado["Juan"];
                //postulante.Apellidos = (String)resultado["Duran"];
                //postulante.Sexo = (String)resultado["Varon"];
            }
            else // Retornamos una excepción si no existe el registro en la BD
            {
                //throw new Exception("El codigo solicitado no existe en la BD");
                postulante = null;
            }
            conexion.Close();
            return postulante;
        }

    public Postulante ModificarPostulante(Postulante postulante)
        {
            Postulante postulanteRegistrado = this.ObtenerPostulante(postulante.Id_Postulante);
            String sentencia =   "UPDATE postulante " +
                                 "SET " +
                                 "Nombres=@nombres, " +
                                 "Apellidos=@apellidos, " +
                                 "Sexo=@sexo, " +
                                 "Profesion=@profesion " +
                                 "Especialidad=@especialidad " +
                                 "Ciudad_Domicilio=@Ciudad_Domicilio " +
                                 "Direccion=@direccion " +
                                 "Email=@email, " +
                                 "Password=@password, " +
                                 "Dni=@dni, " +
                                 "Fecha_Nacimiento=@fecha_nacimiento, " +
                                 "Telefono=@telefono, " +                                 
                                 "Referencia_Idiomas=@referencia_idiomas " +
                                 "WHERE " +
                                 "Id_postulante=@idpostulante";

                this.conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
                {
                    SqlParameter idpostulante = new SqlParameter("@idpostulante", System.Data.SqlDbType.NVarChar);
                    idpostulante.Value = postulante.Id_Postulante;
                    comando.Parameters.Add(idpostulante);

                    SqlParameter nombres = new SqlParameter("@nombres", System.Data.SqlDbType.NVarChar);
                    nombres.Value = postulante.Nombres;
                    comando.Parameters.Add(nombres);

                    SqlParameter apellidos = new SqlParameter("@apellidos", System.Data.SqlDbType.NVarChar);
                    apellidos.Value = postulante.Apellidos;
                    comando.Parameters.Add(apellidos);

                    SqlParameter sexo = new SqlParameter("@sexo", System.Data.SqlDbType.NVarChar);
                    sexo.Value = postulante.Sexo;
                    comando.Parameters.Add(sexo);

                    SqlParameter profesion = new SqlParameter("@profesion", System.Data.SqlDbType.NVarChar);
                    profesion.Value = postulante.Profesion;
                    comando.Parameters.Add(profesion);

                    SqlParameter especialidad = new SqlParameter("@especialidad", System.Data.SqlDbType.NVarChar);
                    especialidad.Value = postulante.Especialidad;
                    comando.Parameters.Add(especialidad);

                    SqlParameter ciudad_domicilio = new SqlParameter("@ciudad_domicilio", System.Data.SqlDbType.NVarChar);
                    ciudad_domicilio.Value = postulante.Ciudad_Domicilio;
                    comando.Parameters.Add(ciudad_domicilio);

                    SqlParameter direccion = new SqlParameter("@direccion", System.Data.SqlDbType.NVarChar);
                    direccion.Value = postulante.Direccion;
                    comando.Parameters.Add(direccion);

                    SqlParameter email = new SqlParameter("@email", System.Data.SqlDbType.NVarChar);
                    email.Value = postulante.Email;
                    comando.Parameters.Add(email);

                    SqlParameter password = new SqlParameter("@password", System.Data.SqlDbType.NVarChar);
                    password.Value = postulante.Password;
                    comando.Parameters.Add(password);

                    SqlParameter dni = new SqlParameter("@dni", System.Data.SqlDbType.NVarChar);
                    dni.Value = postulante.Dni;
                    comando.Parameters.Add(dni);

                    SqlParameter fecha_nacimiento = new SqlParameter("@fecha_nacimiento", System.Data.SqlDbType.Date);
                    fecha_nacimiento.Value = postulante.Fecha_Nacimiento;
                    comando.Parameters.Add(fecha_nacimiento);

                    SqlParameter telefono = new SqlParameter("@telefono", System.Data.SqlDbType.NVarChar);
                    telefono.Value = postulante.Telefono;
                    comando.Parameters.Add(telefono);

                    SqlParameter referencia_idiomas = new SqlParameter("@referencia_idiomas", System.Data.SqlDbType.NVarChar);
                    referencia_idiomas.Value = postulante.Referencia_Idiomas;
                    comando.Parameters.Add(referencia_idiomas);                    

                    comando.ExecuteNonQuery();
                }
                this.conexion.Close();
                return this.ObtenerPostulante(postulante.Id_Postulante);
        }

        
        //Eliminarpostulante
        public void EliminarPostulante(Int32 Id_postulante_A_Eliminar)
        {
            String sentencia = "DELETE FROM postulante WHERE Id_Postulante=@Id_postulante_A_Eliminar";
            this.conexion.Open();

            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter pk = new SqlParameter("@Id_postulante_A_Eliminar", System.Data.SqlDbType.NVarChar);
                pk.Value = Id_postulante_A_Eliminar;
                comando.Parameters.Add(pk);
                comando.ExecuteNonQuery();
            }
            this.conexion.Close();
        }
        
    }

}



 